package logicaPersistencia.poolConexiones;


public class PoolConexionesArchivo implements IPoolConexiones {
	private boolean escribiendo;
	int lectores;
	
	public PoolConexionesArchivo() {
		escribiendo = false;
		lectores = 0;
	}
	
	@Override
	public synchronized IConexion obtenerConexion(boolean bool) throws InterruptedException {
		if(bool) 
		{
			permisoEscritura();
		}
		else 
		{
			permisoLeer();
		}	
		
		return null;
	}

	public synchronized void permisoLeer() throws InterruptedException 
	{
		while(escribiendo)
		{
			wait();
		}
			lectores++;
	}

	private synchronized void permisoEscritura() {
		try 
		{
			while(escribiendo || lectores > 0) {
				wait();
		}
			escribiendo = true;
		} catch (Exception e) {}
		
	}

	@Override
	public synchronized void liberarConexion(boolean bool, IConexion conex) {
		if(escribiendo) 
		{
			escribiendo = false;
			notifyAll();
		} else 
		{
			lectores--;
			notifyAll();
		}
	}
	
}
